package com.lesserpand.springcloudalibabacore.config.rabbitmq.config;

import com.lesserpand.springcloudalibabacore.config.rabbitmq.constant.MqEnum;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author pand
 * 队列配置  可以配置多个队列
 */
@Configuration
public class QueueConfig {
    /**
     * 消息中心TTL队列，这个延迟队列的消息超期以后，会路由到DIRECT_EXCHANGE交换器，第一次消费的交换器
     *
     * @return
     */
    @Bean
    public Queue firstMessageTtlQueue() {
        return QueueBuilder
                .durable(MqEnum.FIRST_MESSAGE_TTL_QUEUE.getValue())
                // 配置到期后转发的交换
                .withArgument("x-dead-letter-exchange", MqEnum.FIRST_DIRECT_EXCHANGE.getValue())
                // 配置到期后转发的路由键
                .withArgument("x-dead-letter-routing-key", MqEnum.FIRST_MESSAGE_QUEUE_KEY.getValue())
                .build();
    }

    /**
     * 消息中心TTL队列，这个延迟队列的消息超期以后，会路由到DIRECT_EXCHANGE2交换器，第二次消费的交换器
     *
     * @return
     */
    @Bean
    public Queue secondMessageTtlQueue() {
        return QueueBuilder
                .durable(MqEnum.SECOND_MESSAGE_TTL_QUEUE.getValue())
                // 配置到期后转发的交换
                .withArgument("x-dead-letter-exchange", MqEnum.SECOND_DIRECT_EXCHANGE.getValue())
                // 配置到期后转发的路由键
                .withArgument("x-dead-letter-routing-key", MqEnum.SECOND_MESSAGE_QUEUE_KEY.getValue())
                .build();
    }

    /**
     * 消息中心实际消费队列配置，第一次消费
     *
     * @return
     */
    @Bean
    public Queue firstMessageQueue() {
        return new Queue(MqEnum.FIRST_MESSAGE_QUEUE.getValue());
    }

    /**
     * 消息中心实际消费队列配置，第二次消费
     *
     * @return
     */
    @Bean
    public Queue secondMessageQueue() {
        return new Queue(MqEnum.SECOND_MESSAGE_QUEUE.getValue());
    }


    /**
     * 抢购订单排队入库队列
     *
     * @return
     */
    @Bean
    public Queue skillMessageQueue() {
        return new Queue(MqEnum.SKILL_MESSAGE_QUEUE.getValue());
    }
}
